"""
定义合并购物车功能函数
"""

from django_redis import get_redis_connection
from meiduo_mall.utils.cookiesecret import CookieSecret

# 功能：合并购物车数据
# 参数：request请求对象(为了获取cookie数据，用户对象)；response响应对象(清除cookie购物车数据)
# 返回值：返回响应对象
def merge_cart_cookie_to_redis(request, response):
    # TODO: ========解密cookie购物车数据=========
    # (1)、提取加密cookie购物车字符串
    cookie_str = request.COOKIES.get('carts')
    # (2)、解密出购物车字典数据
    if cookie_str:
        cart_dict = CookieSecret.loads(cookie_str)
    else:
        cart_dict = {}

    # cart_dict = {1:{"count":3, "selected": True}, 2:{"count":31, "selected": False}}
    # TODO: ========操作redis合并购物车=========
    # Redis数据库中的购物车数据保留。
    # 如果cookie中的购物车数据在Redis数据库中已存在，将cookie购物车数据"覆盖"Redis购物车数据。
    # 如果cookie中的购物车数据在Redis数据库中不存在，将cookie购物车数据"新增"到Redis。
    user = request.user
    conn = get_redis_connection('carts')
    sku_ids = cart_dict.keys() # [1, 2]
    for sku_id in sku_ids:
        conn.hset('carts_%s'%user.id, sku_id, cart_dict[sku_id]['count']) # 存在则覆盖，不存在则新增
        if cart_dict[sku_id]['selected']:
            conn.sadd('selected_%s'%user.id, sku_id)
        else:
            conn.srem('selected_%s' % user.id, sku_id)

    # TODO: 删除原有的cookie购物车数据
    response.delete_cookie('carts')
    return response










